/**
 * 描述:springboot
 *  1.springboot常用注解
 *      1.@Conditional:通过一定的条件判断是否注册bean，常用@ConditionalOnProperty
 *      2.@Profile:指定哪个环境的情况下Bean才会被注册
 *      3.@Scope:注解在类上，用于判断spring bean的作用域
 *          1.Singleton：单例
 *          2.prototype:每次都会生成一个新的对象
 *          3.session:同个会话内
 *          4.request:同个请求内
 *          5.gloableSession:全局会话有效
 *      4.@import:导入其它配置类
 *      5.ExceptionHandler:用在方法上面表示遇到异常就执行此方法
 *      6.ControllerAdvice:全局异常处理
 *  2.springboot中过滤器和拦截器如何实现
 *      1.拦截器
 *          1.实现HandlerInterceptor，重写preHandler,postHandler等方法
 *          2.实现WebMvcConfigurer，重写addInterceptors方法添加刚才定义的拦截器
 *      3.过滤器
 *          1.实现Filter，重写doFilter方法
 *          2.然后用FilterRegistrationBean注册过滤器,设置拦截路径之类的
 *  3.springboot自动配置原理
 *      1.最主要的注解@EnableAutoConfiguration，开启自动配置，这个注解会扫描META-INF/spring.factories文件中所有的自动配置类
 *      2.spring.factories里面存储的是key value形式的键值，定义了很多类的全限定类名，然后加载到spring容器中
 *      3.这些类的结尾都是AutoConfiguration，会加载以Properties结尾的配置类
 *      4.这些配置类上面都@ConfigurationProperties的注解
 *      5.自动配置类的生效是有条件的，一般用@Conditional注解来控制bean的加载生效
 *      6.一般还有@EnableConfigurationProperties注解来引入配置属性，这样就可以在application.properties进行属性配置并且生效
 *  4.springboot相对于spring有什么优势
 *      1.自动配置：传统spring开发，需要编写大量的xml配置文件，占用时间。而springboot只需要在application.properties里面进行配置，
 *          或者自定义javaConfig的配置文件，完全无需编写xml
 *      2.起步依赖：springboot有许多起步的starter模块，引入之后一般只需要注解配置@Enable就可以启用
 *      3.内嵌tomcat容器：可以java -jar直接执行jar包，适合微服务，容器化部署
 *  5.springboot启动原理（源码级，run方法执行了什么）
 *      1.创建并启动计时监控类(StopWatch)
 *      2.声明应用上下文对象和异常报告集合(context,exceptionReporters)
 *      3.设置系统handless的属性，用于做一些简单的图像处理(configureHeadlessProperty)
 *      4.创建所有的spring运行监听器并发布应用启动事件(getRunListeners)
 *      5.处理main方法中传进来的args参数(DefaultApplicationArguments)
 *      6.准备环境(prepareEnvironment)
 *      7.创建banner打印类(printBanner)
 *      8.创建应用上下文,spring容器(createApplicationContext)
 *      9.准备应用上下文,spring容器前置处理，包含把启动类注册进去，为后面的自动配置奠定基础(prepareContext)
 *      10.刷新应用上下文，刷新spring容器，对整个IOC容器初始化(refreshContext)
 *      11.应用上下文刷新之后事件的处理，可以重写自定义执行(afterRefresh)
 *      12.停止计时监控
 *      13.发布应用上下文启动完成事件
 *      14.执行所有runner运行器，一些程序中自定义的runner，继承AplicationRunner，可以在程序启动之后自动执行一些代码
 *      15.发布应用上下文就绪事件
 *      16.返回应用上下文对象
 * @author Youjm
 * @created 2022/2/27 17:06
 */
public class Springboot {
}
